package com.jyw.business.obstacles.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jyw.business.obstacles.domain.ObsOrderInfo;
import com.jyw.business.obstacles.domain.dto.web.*;
import com.jyw.business.obstacles.domain.dto.wechat.WxCallRecordPageDto;
import com.jyw.business.obstacles.domain.vo.web.*;
import com.jyw.business.obstacles.domain.vo.wechat.*;
import com.jyw.common.core.page.BasePage;
import com.jyw.system.domain.dto.BaseTimeDto;
import com.jyw.system.domain.vo.UserCacheVo;

import java.util.Date;
import java.util.List;

/**
 * 工单基本信息Service接口
 *
 * @author system
 * @date 2023-08-10
 */
public interface IObsOrderInfoService extends IService<ObsOrderInfo> {
    /**
     * 查询工单基本信息
     *
     * @param id 工单基本信息主键
     * @return 工单基本信息
     */
    public ObsOrderInfo selectObsOrderInfoById(Long id);

    /**
     * 查询工单基本信息列表
     *
     * @param obsOrderInfo 工单基本信息
     * @return 工单基本信息集合
     */
    public List<ObsOrderInfo> selectObsOrderInfoList(ObsOrderInfo obsOrderInfo);

    /**
     * 新增工单基本信息
     *
     * @param obsOrderInfo 工单基本信息
     * @return 结果
     */
    public int insertObsOrderInfo(ObsOrderInfo obsOrderInfo);

    /**
     * 修改工单基本信息
     *
     * @param obsOrderInfo 工单基本信息
     * @return 结果
     */
    public int updateObsOrderInfo(ObsOrderInfo obsOrderInfo);

    /**
     * 批量删除工单基本信息
     *
     * @param ids 需要删除的工单基本信息主键集合
     * @return 结果
     */
    public int deleteObsOrderInfoByIds(Long[] ids);

    /**
     * 删除工单基本信息信息
     *
     * @param id 工单基本信息主键
     * @return 结果
     */
    public int deleteObsOrderInfoById(Long id);

    /**
     * 生成工单号
     *
     * @return 工单号
     */
    public String generateOrderNum();

    /**
     * 通过工单号获取工单信息
     * @return
     */
    public ObsOrderInfo getInfoByOrderNum(String orderNum);

    /**
     * 查询通话记录
     *
     * @param callRecordPageDto
     * @return
     */
    List<CallRecordPageVO> selectRecordList(CallRecordPageDto callRecordPageDto);

    /**
     * 微信查询通话记录
     *
     * @param wxCallRecordPageDto
     * @return
     */
    List<WxCallRecordPageVO> selectWxRecordList(WxCallRecordPageDto wxCallRecordPageDto);

    /**
     * 微信查询工单详情
     *
     * @param orderNum
     * @return
     */
    WxWorkOrderQueryInfoVO getDetailByOrderNum(String orderNum);

    /**
     * 查询微信报修信息
     *
     * @param orderNum
     * @return
     */
    WxWorkOrderInfoVO findByOrderNum(String orderNum);

    /**
     * 查询工单详情
     * @param orderNum
     * @return
     */
    OrderDetailVO detail(String orderNum);

    /**
     * 标记无效电话
     * @param data
     */
    void dealInvalid(Long data);

    /**
     * 电话找人
     * @param dto
     */
    void dealFind(FindUserDto dto);

    /**
     * 关联工单
     * @param dto
     */
    void link(OrderLinkedDto dto);

    /**
     * 工单耗时信息
     * @param orderNum
     * @return
     */
    OrderMakeInfoDto orderTime(String orderNum);

    /**
     * 服务台坐席人员
     * @return
     */
    List<UserCacheVo> serverUser();

    /**
     * 首页 我的-服务台
     * @param baseTimeDto
     * @return
     */
    List<HomeMineServerVO> mineServer(BaseTimeDto baseTimeDto);

    /**
     * 首页 我的工单
     * @param baseTimeDto
     * @return
     */
    List<HomeMineOrderVO> mineOrder(BaseTimeDto baseTimeDto);

    /**
     * 首页 待办计数
     * @return
     */
    HomeObsToDoVO todo();

    /**
     * 首页-报修来源统计
     * @param type
     * @return
     */
    HomeOrderSourceChartVO homeOrderSource(String type);

    /**
     * 首页-报修来源统计(总数)
     * @return
     */
    HomeOrderSourceTotalVO homeOrderSourceTotal();

    /**
     * 首页-报修故障分类排名
     * @param baseTimeDto
     * @return
     */
    List<HomeOrderFaultRankVO> orderFaultRank(BaseTimeDto baseTimeDto);

    /**
     * 首页-工程师接单数排名
     * @param baseTimeDto
     * @return
     */
    List<HomeUserOrderRankVO> orderUserRank(BaseTimeDto baseTimeDto);

    /**
     * 首页-告警信息
     * @return
     */
    List<HomeOrderWarningVO> orderWarning();

    /**
     * 我的工单数量
     * @return
     */
    Integer mineOrderNum();

    /**
     * 工单审核数量
     * @return
     */
    Integer mineAuditOrderNum();

    /**
     * 服务日报
     * @return
     */
    WxOrderDailyVO daily(Date date);

    /**
     * 服务详情
     * @param date
     * @return
     */
    List<WxOrderDailyDetailVO> dailyDetail(Date date);

    /**
     * 重报
     * @param dto
     */
    void repeat(OrderLinkedDto dto);

    /**
     * 待派单工单详情
     * @return
     */
    List<ServerPageVO> getWaitDispatch(ServerPageDto pageDto, BasePage page);

    /**
     * 待建单工单详情
     * @param pageDto
     * @param page
     * @return
     */
    List<ServerCallPageVO> getWaitCreate(ServerCallPageDto pageDto, BasePage page);

    /**
     * 待处理工单详情
     * @return
     */
    List<OrderAllPageVO> getWaitHandleList(OrderAllPageDto dto);

    /**
     * 标记电话解决
     * @param data
     */
    void phoneEnd(Long data);
}
